import { Injectable } from '@angular/core';

declare const BMap;

@Injectable({
  providedIn: 'root'
})
export class BMapService {

  bMap: any;
  centerPoint = new BMap.Point(113.2708136740, 23.1351666766);
  overlayInstance: any;       // 覆盖物实例
  eventsListTemp = [];        // 记录已绑定的事件列表

  constructor() { }

  /**
   * 地图初始化
   * @param mapId(string) ：地图dom元素的id属性
   */
  initMap(mapId) {
    this.bMap = new BMap.Map(mapId);
    this.bMap.centerAndZoom(this.centerPoint, 10);
    this.bMap.enableScrollWheelZoom();
  }

  /**
   * 添加覆盖物
   * @param overlay(any) ：覆盖物对象
   */
  addOverlay(overlay) {
    this.overlayInstance = overlay;
    this.bMap.clearOverlays();
    this.bMap.addOverlay(overlay);
  }

  /**
   * 清除覆盖物
   */
  clearOverlays() {
    this.bMap.clearOverlays();
  }

  /**
   * 绑定事件函数
   */
  eventsFn(e) {
    console.log(e);
  }

  /**
   * 绑定类事件
   * @param eventsList(string[]) ：需要绑定的事件列表
   */
  bindEvents(eventsList: string[] = []) {
    // 先删除之前所绑定的所有事件
    if (this.eventsListTemp.length) {
      this.eventsListTemp.forEach(event => {
        this.overlayInstance.removeEventListener(event, this.eventsFn);
      });
    }

    this.eventsListTemp = eventsList;
    if (eventsList.length) {
      eventsList.forEach(event => {
        this.overlayInstance.addEventListener(event, this.eventsFn);
      });
    }
  }
}
